package org.erp.common.page;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;

import java.util.List;
import java.util.function.Function;

/**
 * 分页查询模型
 *
 * @author libin
 * @version 1.0
 * @description: 分页查询模型
 * @date 2025/10/28 13:29
 **/
@Data
@Builder
@AllArgsConstructor
public class PageQueryModel<T> {

    /**
     * 总记录数
     */
    private long total;

    /**
     * 列表数据
     */
    private List<T> dataList;

    /**
     * 构建分页查询模型对象
     * @param page 分页对象
     * @return 分页模型对象
     * @param <T> 入参
     */
    public static <T> PageQueryModel<T> of(Page<T> page) {
        return new PageQueryModel<>(page.getTotal(), page.getRecords());
    }

    /**
     * 私有构造
     */
    private PageQueryModel() {}

    /**
     * 构建分页查询模型对象
     * @param mapper 分页对象
     * @return 分页模型对象
     */
    public <R> PageQueryModel<R> cover(Function<T,R> mapper) {
        return new PageQueryModel<>(
                this.getTotal(),
                this.dataList.stream()
                        .map(mapper)
                        .toList()
        );
    }
    /**
     * 构建分页查询模型对象
     * @param total,list 分页对象
     * @return 分页模型对象
     * @param <T> 入参
     */
    public static <T> PageQueryModel<T> of(Long total,List<T> list) {
        return new PageQueryModel<>(total, list);
    }
}
